iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
1
自我挑戰組

Wordpress 外掛開發系列 第 10

「Wordpress 外掛開發」個人隱私

  • 分享至 

  • xImage
  •  

你有想過不管是追蹤資料或是cookie這些的利用,其實在很多地方的法規上都是需要表明註記的,尤其是在歐盟的國家,GDPR更是嚴苛,而我在的國家本身也是需要標明網站使用到的資料,不管是進GA也好,或是給投廣告,你都必須在一開頭就寫得清清楚楚,而每一個外掛都會有不同的privacy,老實說比較聰明的方式並不是每個開發的外掛都寫在這,而是在自己的網站加上了這一段。

/**
 * 增加隱私權的說明與consent
 */
function wporg_add_privacy_policy_content() {
    if ( ! function_exists( 'wp_add_privacy_policy_content' ) ) {
        return;
    }
    $content = '<p class="privacy-policy-tutorial">' . __( 'Some introductory content for the suggested text.', 'text-domain' ) . '</p>'
            . '<strong class="privacy-policy-tutorial">' . __( 'Suggested Text:', 'my_plugin_textdomain' ) . '</strong> '
            . sprintf(
                __( 'When you leave a comment on this site, we send your name, email address, IP address and comment text to example.com. Example.com does not retain your personal data. The example.com privacy policy is <a href="%1$s" target="_blank">here</a>.', 'text-domain' ),
                'https://example.com/privacy-policy'
            );
    wp_add_privacy_policy_content( 'Example Plugin', wp_kses_post( wpautop( $content, false ) ) );
}
 
add_action( 'admin_init', 'wporgmy_example_plugin_add_privacy_policy_content' );

增加個人資料到你的外掛

在4.9.6版之後wordpress有提供一個exporter可以串接,一個套件能增加很多的exporter來匯出與加入到自己的外掛之中,但大多的外掛只需要一個,我們照著官網的範例來將地方資料加近評論者的評論之中,而我們需要使用到add_comment_meta來增加我們所需的資料,而我們需要增加的是經緯度。

function wporg_export_user_data_by_email( $email_address, $page = 1 ) {
    $number = 500; // Limit us to avoid timing out
    $page   = (int) $page;
 
    $export_items = array();
 
    $comments = get_comments(
        array(
            'author_email' => $email_address,
            'number'       => $number,
            'paged'        => $page,
            'order_by'     => 'comment_ID',
            'order'        => 'ASC',
        )
    );
 
    foreach ( (array) $comments as $comment ) {
        $latitude  = get_comment_meta( $comment->comment_ID, 'latitude', true );
        $longitude = get_comment_meta( $comment->comment_ID, 'longitude', true );
 
        // Only add location data to the export if it is not empty.
        if ( ! empty( $latitude ) ) {
            // Most item IDs should look like postType-postID. If you don't have a post, comment or other ID to work with,
            // use a unique value to avoid having this item's export combined in the final report with other items
            // of the same id.
            $item_id = "comment-{$comment->comment_ID}";
 
            // Core group IDs include 'comments', 'posts', etc. But you can add your own group IDs as needed
            $group_id = 'comments';
 
            // Optional group label. Core provides these for core groups. If you define your own group, the first
            // exporter to include a label will be used as the group label in the final exported report.
            $group_label = __( 'Comments', 'text-domain' );
 
            // Plugins can add as many items in the item data array as they want.
            $data = array(
                array(
                    'name'  => __( 'Commenter Latitude', 'text-domain' ),
                    'value' => $latitude,
                ),
                array(
                    'name'  => __( 'Commenter Longitude', 'text-domain' ),
                    'value' => $longitude,
                ),
            );
 
            $export_items[] = array(
                'group_id'    => $group_id,
                'group_label' => $group_label,
                'item_id'     => $item_id,
                'data'        => $data,
            );
        }
    }
 
    // Tell core if we have more comments to work on still.
    $done = count( $comments ) > $number;
    return array(
        'data' => $export_items,
        'done' => $done,
    );
}

再者之後我們加上了wp_privacy_personal_data_exporters這個filter來加上exporters並且回傳。

function wporg_register_user_data_exporters( $exporters ) {
    $exporters['my-plugin-slug'] = array(
        'exporter_friendly_name' => __( 'Comment Location Plugin', 'text-domain' ),
        'callback'               => 'my_plugin_exporter',
    );
    return $exporters;
}
 
add_filter( 'wp_privacy_personal_data_exporters', 'wporg_register_user_data_exporters' );

後記

寫了十天,每天花了不少時間寫這些,不過今天算是做的最隨便的一天了,老實說寫到後面有點徬徨,不知道自己在寫什麼,或是原本自己排定有系統的寫法,總覺得不是個好辦法,按著官網的進度在學習寫程式,這感覺是個最慢的方式來學習了,我總想著應該將介紹的篇幅減少多些,把每一章的小型外掛整理得更完整些,是不是會讓做中學的效率更加快捷呢?

這幾天寫下來,寫最快的是程式碼,再加上有範例程式碼可以參照,基本上弄完差不多是幾十分鐘,但難是難在之後的那些解釋與讓文章更加流暢,這些真的很惱人,而在解釋的同時我又不經意感覺自己是不是在當一個翻譯人士,或是向大學助教一樣,像拿著教材去教學生該嘴怎麼看那些人家已經整理好的資料與教學,感覺這點的意義不是很大,我覺得應該盡快結束這種按本宣課的講解,之後更希望在解釋的部分,我會使用連結的方式來做主要,然後用些簡述的方式為他做個介紹,並且把每一章的實作做的更貼近使用層面。

不過要改變也不是那麼容易,有些基礎該說的還是得提,明天依舊是講該怎麼匯入那些靜態檔案與hook的應用,現在回頭想想,講解那些action與filter該是怎麼用與interface,那些在codeX找就信手捻來的解釋,把每一段節錄出來,不讓看到這些字眼教大家直接去CodeX去搜尋更加直接。

後面是很想找StackOverflow上面wordpress 外掛開發的問題來探討與寫些自己的做法,不過總覺得這樣不夠意思,畢竟當初片名就是寫著外掛開發不是一百萬個為什麼,學習開發很容易,不過寫得很膩,真的。

reference

Wordpress - Privacy
How to Add a Privacy Policy in WordPress
The Difference Between is_singular() and is_single()


上一篇
「Wordpress 外掛開發」己也造個hook吧 add_action/add_filter
下一篇
「Wordpress 外掛開發」加入自己的靜態檔案 wp_regist_scripts/wp_enqueue_script
系列文
Wordpress 外掛開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言